#include "BDLivro.h"

/*!
 * \brief Construtor
 *
 * Instancia a classe e chama o método
 * que carrega os livros
 */
BDLivro::BDLivro()
{
	CarregaLivros();
}

BDLivro::~BDLivro()
{

}

/**
 * \brief Carrega os dados dos livros
 *
 * Método implementado para testes, carrega
 * os livros de uma maneira estática
 */
void BDLivro::CarregaLivros()
{
	Livro l1, l2, l3, l4, l5;

	l1.SetID(22);
	l1.SetTitulo("50 Poemas");
	l1.SetTema("Letras");
	l1.SetAutor("Andrade, Carlos Drummond de");
	l1.SetValor(32.7);
	l1.SetAnoPublicacao(1956);
	l1.SetEdicao("");
	l1.SetPaginas("98p.");
	Dados.push_back(l1);

	l2.SetID(44);
	l2.SetTitulo("A Arte da Guerra");
	l2.SetTema("Direito Administrativo");
	l2.SetAutor("Sun, Tzu");
	l2.SetValor(37);
	l2.SetAnoPublicacao(1994);
	l2.SetEdicao("15.ed");
	l2.SetPaginas("111p.");
	Dados.push_back(l2);

	l3.SetID(104);
	l3.SetTitulo("A confissao de Lucio");
	l3.SetTema("Ficcao");
	l3.SetAutor("Sa-Carneiro, Mario de");
	l3.SetValor(45);
	l3.SetAnoPublicacao(1991);
	l3.SetEdicao("");
	l3.SetPaginas("135p.");
	Dados.push_back(l3);

	l4.SetID(3145);
	l4.SetTitulo("Gerencia Financeira");
	l4.SetTema("Administracao de Empresas");
	l4.SetAutor("Silva, Sergio Educardo Dias da");
	l4.SetValor(75.3);
	l4.SetAnoPublicacao(1991);
	l4.SetEdicao("");
	l4.SetPaginas("226p.");
	Dados.push_back(l4);

	l5.SetID(5218);
	l5.SetTitulo("Os brasileiros");
	l5.SetTema("Antropologia cultural");
	l5.SetAutor("Ribeiro, Darci");
	l5.SetValor(176.7);
	l5.SetAnoPublicacao(1993);
	l5.SetEdicao("12.ed");
	l5.SetPaginas("v.1");
	Dados.push_back(l5);
}

/**
 * \brief Método não implementado
 */
void BDLivro::SalvaLivros()
{

}

/**
 * \brief Monta árvore binária de pesquisa
 *
 * Monta árvore binária de pesquisa de acordo com o tipo de interesse
 *
 * \param tipo Códito do tipo do interesse (1=tema, 2=autor, 3=título(
 */
void BDLivro::MontaPesquisa(int tipo)
{
	Pesquisa.Limpa();

	switch(tipo) {
		case 2:
			for(unsigned int i=0; i<Dados.size(); i++) {
				Pesquisa.Insere(Dados.at(i).GetAutor(), Dados.at(i));
			}
		break;
	}
}

/**
 * \brief Seleciona um livro a partir do ID
 *
 * \param id ID do Livro
 * \return Livro Livro que corresponde ao ID
 */
Livro BDLivro::Seleciona(long id)
{
	Livro l;

	for(unsigned int i=0; i<Dados.size(); i++) {
		if (id == Dados.at(i).GetID()) return Dados.at(i);
	}
	return l;
}

/**
 * \brief Método não implementado
 *
 * \param id
 */
void BDLivro::Remove(long id)
{

}

/**
 * \brief Método não implementado
 */
void BDLivro::Primeiro()
{

}

/**
 * \brief Método não implementado
 */
void BDLivro::Proximo()
{

}

/**
 * \brief Método não implementado
 */
bool BDLivro::Final()
{
	return true;
}

/**
 * \brief Método não implementado
 *
 * \return Livro
 */
Livro BDLivro::GetItem()
{
	Livro l;
	return l;
}

/**
 * \brief Retorna o próximo ID para  um novo livro
 *
 * \return long Próximo ID disponível para cadastro
 * de um novo Livro
 */
long BDLivro::GetProximoID()
{

}

/**
 * \brief Adiciona um novo livro
 *
 * \param ID Código do novo livro
 * \param novo Objeto do novo livro
 */
void BDLivro::Adiciona(long ID, Livro novo)
{
}

/**
 * \brief Realiza a pesquisa por interesse
 *
 * Pesquisa na árvore binaria os dados que correspondem ao
 * valor informado. O valor pode ser um Tema, um Autor ou
 * um Título.
 *
 * \param valor Valor que se quer pesquisar
 */
vector<Livro> BDLivro::PesquisaInteresses(string valor) {
	vector<Livro> resultado;
	try {
		resultado = Pesquisa.Seleciona(valor);
	}
	catch(exception e) {
		cout << "Livro nao encontrado!" << endl;
	}

	return resultado;
}
